/* 
 * UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
 * CENTRO DE TECNOLOGIA
 * DEPARTAMENTO DE ENGENHARIA DE COMPUTA��O E AUTOMA��O
 * PROJETO E DESENVOLVIMENTO DE SOFTWARE
 * 
 * BACO SYSTEM
 * CLASSE: PersistenciaProjeto
 * VERS�O ORIGINAL: Caroline Albuquerque Dantas Silva
 * MODIFICA��ES: ---
 * */
package bacoopc.persistencia;

import bacoopc.Projeto;
import bacoopc.excecoes.ExcecaoBacoOpc;
import bacoopc.gui.entidades.ProjetoInterface;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PersistenciaProjeto extends Persistencia {

    public PersistenciaProjeto() {
        super();
    }

    //por favor, passar o objeto "projeto"
    public int inserirProjeto(Projeto projeto) {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.insert");
            ps.setString(1, projeto.getNome());
            ps.setString(2, projeto.getAutor());
            ps.setInt(3, 0);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    //por favor, passar o objeto "projeto"
    public int excluirProjeto(int id) {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            /*Precisa de codifica��o que garanta a integridade referencial*/

            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.delete");
            ps.setInt(1, id);

            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    //por favor, passar o objeto "projeto"
    public int alterarProjeto(int id, int status) {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.update");
            ps.setInt(1, status);
            ps.setInt(2, id);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * Retorna uma lista com os projetos. A lista é ordenada de acordo
     * com a ordem crescente dos nomes dos projetos
     *
     * @return Uma lista com os projetos inseridoxs pela ferramente
     */
    public List<ProjetoInterface> getProjetos() throws ExcecaoBacoOpc {
        ArrayList<ProjetoInterface> result = new ArrayList<ProjetoInterface>();
        try {
            ResultSet tabela = this.consultarProjetos();
            while (tabela.next()) {
                ProjetoInterface projeto =
                        new ProjetoInterface(tabela.getString("Nome"),
                        tabela.getString("Autor"), tabela.getDate("Data"),
                        false) ;
                result.add(projeto);

                Logger.getLogger("log:crisgc").log(Level.INFO, projeto.getNome() + ", " +
                        projeto.getAutor() + ", " + projeto.getDataCriacao()) ;
            }
        } catch (SQLException ex) {
            Logger.getLogger("log:crisgc").log(Level.SEVERE, null, ex);
            throw new ExcecaoBacoOpc(ex);
        }
        return result;
    }

    /**
     * Retorna a tabela com os resultados dos projetos
     *
     * @return Uma tabela com todos os projetos cadastrados
     */
    protected ResultSet consultarProjetos() {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.query");
            return ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public int associarSevidorAoProjeto(int idprojeto, int idservidor, int flag) {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.insert.servidor");
            ps.setInt(1, idprojeto);
            ps.setInt(2, idservidor);
            ps.setInt(3, flag);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public int AssociarAlgoritmoAoProjeto(int idprojeto, int idalgoritmo, int flag) {
        QueryManager manager = QueryManager.getQueryManager();

        try {
            PreparedStatement ps = manager.getPreparedStatement(con, "projeto.insert.algoritmo");
            ps.setInt(1, idprojeto);
            ps.setInt(2, idalgoritmo);
            ps.setInt(3, flag);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
}
